// 文件路径: src/store/modules/user.ts

import { defineStore } from 'pinia'
// 从我们新的 API 统一出口导入 auth 相关的接口和类型
import { loginApi, getAdminInfoApi } from '@/api'
import type { LoginFormData, AdminUserInfo } from '@/api/types/auth'

// 定义 User State 的类型
interface UserState {
  token: string
  // 这里我们直接复用 API types 中定义好的 AdminUserInfo 类型
  userInfo: AdminUserInfo | null
}

export const useUserStore = defineStore('user', {
  state: (): UserState => ({
    token: localStorage.getItem('admin-token') || '',
    userInfo: null,
  }),

  getters: {
    isLoggedIn: (state) => !!state.token,
    username: (state) => state.userInfo?.username || '未登录', // 提供一个默认值
  },

  actions: {
    // 登录 Action
    async login(loginData: LoginFormData) {
      // 1. 调用登录 API
      const response = await loginApi(loginData)
      // 2. 更新 state 中的 token
      this.token = response.access_token
      // 3. 将 token 存入本地存储
      localStorage.setItem('admin-token', response.access_token)
      // 获取用户信息
      await this.getUserInfo()
    },

    // 获取用户信息 Action
    async getUserInfo() {
      // 调用获取当前管理员信息的 API
      const userInfoData = await getAdminInfoApi()
      this.userInfo = userInfoData
    },

    // 退出登录 Action
    logout() {
      this.token = ''
      this.userInfo = null
      localStorage.removeItem('admin-token')
      // 如果需要，可以在这里清除其他 store 的数据
    },
  },
})
